Expand description
§cmark-writer
A CommonMark writer implementation in Rust.
§Usage
§Basic Example
use cmark_writer::ast::{Node, ListItem};
use cmark_writer::writer::CommonMarkWriter;
fn main() {
// Create a document
let document = Node::Document(vec![
Node::Heading {
level: 1,
content: vec![Node::Text("Hello CommonMark".to_string())],
},
Node::Paragraph(vec![
Node::Text("This is a simple ".to_string()),
Node::Strong(vec![Node::Text("example".to_string())]),
Node::Text(".".to_string()),
]),
]);
// Render to CommonMark
let mut writer = CommonMarkWriter::new();
writer.write(&document).expect("Failed to write document");
let markdown = writer.into_string();
println!("{}", markdown);
}§Custom Formatting Options
You can customize the formatting behavior:
use cmark_writer::options::WriterOptions;
use cmark_writer::writer::CommonMarkWriter;
use cmark_writer::ast::Node;
// Create custom options
let options = WriterOptions {
strict: true, // Follow CommonMark spec strictly
hard_break_spaces: false, // Use backslash for line breaks
indent_spaces: 2, // Use 2 spaces for indentation
};
// Create writer with custom options
let mut writer = CommonMarkWriter::with_options(options);
writer.write(&Node::Text("Example".to_string())).unwrap();§API Documentation
§Core Types
Node- Represents various CommonMark node typesListItem- Represents list items, including task list itemsCommonMarkWriter- Converts nodes to CommonMark textWriterOptions- Customization options for the writer
§Development
§Building
cargo build§Running Tests
cargo test§License
This project is licensed under the MIT License - see the LICENSE file for details.
§Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Re-exports§
pub use crate::ast::Alignment;pub use crate::ast::HtmlAttribute;pub use crate::ast::HtmlElement;pub use crate::ast::ListItem;pub use crate::ast::Node;pub use crate::error::WriteError;pub use crate::error::WriteResult;pub use crate::options::WriterOptions;pub use crate::writer::CommonMarkWriter;